iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0

題目說明

給定一個 矩陣,回傳順時鐘從外往內走的路徑

解題思路

找到邊界,L, R, Up, Down


第一遍:左至右,走到盡頭時,更新 up += 1
第二遍:上到下,更新 right -= 1
第三遍:先判斷 up <= down ,右到左,更新 down -= 1
第四遍:先判斷 left <= right,下到上,更新 left += 1

  • Time Complexity: O(n)
  • Space Complexity: O(n)

程式碼

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        res = []
        up, down, left, right = 0, len(matrix)-1, 0, len(matrix[0]) - 1
        while up <= down and left <= right:
            # 左到右
            for i in range(left, right+1):
                res.append(matrix[up][i])
            up += 1

            # 上到下
            for i in range(up, down + 1):
                res.append(matrix[i][right])
            right -= 1

            if up <= down:
            # 右到左
                for i in range(right, left - 1, -1):
                    res.append(matrix[down][i])
                down -= 1
            
            if left <= right:
            # 下到上
                for i in range(down, up - 1, -1):
                    res.append(matrix[i][left])
                left += 1
        return res

其他討論

在四邊形走的時候,走到第三與第四遍要記得判斷邊界,因為 up 與 right 有更新過,所以在走之前要先判斷 up <= down 與 left <= right 再繼續往下走

參考資料

  1. 今天比昨天厲害(2021-11-08)。leetcode 中文 | Spiral Matrix | Microsoft 面試考題 | LeetCode 54 | Python。摘自 Youtube (2023-01-24)

上一篇
Day 7 - 73. Set Matrix Zeroes
下一篇
Day 9 - 23. Merge k Sorted Lists
系列文
Leetcode 習慣養成之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言